企业钱包API文档
介绍
欢迎来到 OpenBlock 开发者文档!
您可以通过 OpenBlock API:
- 创建/审批交易
- 获取企业钱包资产余额和交易历史
- 接收企业钱包相关事件的 webhook 通知
- ......
与传统方法相比,通过 API 进行操作可以提高效率,降低成本,并实现企业钱包的自动化管理。
欢迎使用 OpenBlock API 管理您的钱包,我们提供完善的文档和示例代码,也有专业的技术支持团队为您提供帮助。
接入指南
概述
请使用具有企业钱包管理的用户账户登录OpenBlock并切换到企业钱包,进入企业钱包管理页面,在左侧栏 API
标签页进行管理付费计划、 API 账户创建和Webhook 配置,API 账户创建成功后,可以使用 API Key 来访问企业钱包API。
API 鉴权
GET 请求
GET 请求签名步骤:
设所有发送或者接收到的数据为集合 M,为集合 M 添加一个 nonce 参数,nonce 的值可取 uuid。
将集合 M 内非空参数的值的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对的格式(即 key1=value1&key2=value2...)拼接成字符串 stringA。
特别注意:
参数名 ASCII 码从小到大排序(字典序)
如果参数的值为空不参与签名
参数名区分大小写
在 stringA 最后拼接上 api_key 得到 stringSignTemp 字符串。
使用 api_secret 对 stringA 取 SHA256 的大写 16 进制字符串得到本次请求的签名 sign 值。
在 stringSignTemp 字符串后拼接 &sign=sign 得到最终签名串。
实例:
假设用户的 api_key 为:kkkkkkkkk,api_secret 为:ccccccccc。某次请求的原始 url 为 openapi.openblock.com/api/v1/xxx?a=111&b=222&c=333。
添加 nonce 后排序得到字符串 stringA:a=111&b=222&c=333&nonce=09B7D140-9A8A-4D31-82CF-8B343B2301A7。
为 stringA 拼接 api_key 得到 stringSignTemp:a=111&b=222&c=333&nonce=09B7D140-9A8A-4D31-82CF-8B343B2301A7&api_key=kkkkkkkkk。
使用 api_secret 对 stringSignTemp 取大写 16 进制 SHA256 得到 sign:85F79F53AC252C8547CD2866C09BA9A6F66ABA0407E84E1DDAED16A97C9ACDC7。
为 stringSignTemp 拼接 sign:a=111&b=222&c=333&nonce=09B7D140-9A8A-4D31-82CF-8B343B2301A7&api_key=kkkkkkkkk&sign=85F79F53AC252C8547CD2866C09BA9A6F66ABA0407E84E1DDAED16A97C9ACDC7。
签名结束。
POST 请求
POST 请求签名步骤:
与 GET 请求的处理相同。
将 nonce、api_key、sign 放在 body 中。
若 body 为 JSON 格式,则直接在 JSON 中添加对应的键值。
实例:
假设用户的 api_key 为:kkkkkkkkk,api_secret 为:ccccccccc。某次请求的 body 为:
{
"a": "111",
"b": "222",
"c": "333"
}
添加 nonce 后排序得到字符串 stringA:a=111&b=222&c=333&nonce=08AE0435-E68B-4460-835B-15475B58B75C。
为 stringA 拼接 api_key 得到 stringSignTemp:a=111&b=222&c=333&nonce=08AE0435-E68B-4460-835B-15475B58B75C&api_key=kkkkkkkkk。
使用 api_secret 对 stringSignTemp 取大写 16 进制 SHA256 得到 sign:7D2D6314B659E96A0A406C5837C94D0AC2901192BFEE2C03E7763D710525D980。
重新构建 JSON:
{
"a": "111",
"b": "222",
"c": "333",
"nonce":"08AE0435-E68B-4460-835B-15475B58B75C",
"api_key":"kkkkkkkkk",
"sign":"7D2D6314B659E96A0A406C5837C94D0AC2901192BFEE2C03E7763D710525D980"
}
签名结束。
IP 白名单
在调用企业钱包API时,只允许从您设置的 IP 白名单地址发起请求,您需要在创建 API Key 时设置调用发起的 IP 地址。
请求 base URL
https://auth.openblock.com
API 列表
获取企业钱包信息
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/info/ | GET |
输入参数说明
无
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
company_wallet_info | object | 企业钱包信息 |
--company_wallet_id | string | 企业钱包ID |
--wallet_name | string | 企业钱包名称 |
--team_admin_members | int | 管理员成员数 |
--policy_members | int | 政策成员数 |
role | string | 用户角色,枚举值:ADMIN/SUPER_ADMIN/GENERAL |
address_list | list | 链地址列表 |
--chain | string | 链名称 |
--address | string | 链地址 |
hd_wallet_list | list | 子列包列表 |
--hd_wallet_id | string | 子钱包ID |
--wallet_name | string | 子钱包名称 |
成功返回示例
{
"company_wallet_info":{
"company_wallet_id":"xxx",
"wallet_name":"企业钱包1",
"team_admin_members":2,
"policy_members":1
},
"role":"ADMIN",
"address_list":[
{
"chain":"ETH",
"address":"xxxxx"
},
{
"chain":"Polygon",
"address":"xxxxx"
}
],
"hd_wallet_list":[
{
"hd_wallet_id":"xxxx",
"wallet_name":"子钱包1"
},
{
"hd_wallet_id":"xxxx",
"wallet_name":"子钱包2"
}
]
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
获取企业钱包子钱包地址
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/hd_wallet_address/ | GET |
输入参数说明
参数名 | 是否必传 | 类型 | 描述 |
---|---|---|---|
hd_wallet_id | 是 | string | 企业钱包子钱包id |
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
address_list | list | 链地址列表 |
--chain | string | 链名称 |
--address | string | 链地址 |
成功返回示例
{
"address_list":[
{
"chain":"ETH",
"address":"xxxxx"
},
{
"chain":"Polygon",
"address":"xxxxx"
}
]
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
获取钱包余额
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/balance/ | GET |
输入参数说明
参数名 | 是否必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
chain_name | 是 | string | 区块链名称 | |
currency | 否 | string | USD | 本位货币,枚举值:CNY,USD |
hd_wallet_id | 否 | string | 企业钱包子钱包id,不传时为主钱包 | |
page | 否 | int | 0 | 分页页数 |
limit | 否 | int | 20 | 分页大小 |
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
total | int | 总记录数 |
assets | array | 资产列表 |
- token_address | string | 代币地址 |
- balance | string | 余额 |
- decimal | int | 小数位数 |
- symbol | string | 代币符号 |
- currency_amount | string | 折算成本位货币的余额 |
- price | string | 单价 |
成功返回示例
{
"total": 5,
"assets": [
{
"token_address": "",
"balance": "0.003904238820258",
"decimal": 18,
"symbol": "ETH",
"currency_amount": "7.038835022814874345458984375",
"price": "1802.8699951171875"
},
{
"token_address": "0xe3c408bd53c31c085a1746af401a4042954ff741",
"balance": "0",
"decimal": 8,
"symbol": "GMT2",
"currency_amount": "0",
"price": "0"
},
{
"token_address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
"balance": "0",
"decimal": 8,
"symbol": "WBTC",
"currency_amount": "0",
"price": "26700"
},
{
"token_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"balance": "0",
"decimal": 6,
"symbol": "USDC",
"currency_amount": "0",
"price": "1.0010000467300415"
}
]
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
添加自定义代币
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/custom_token/ | POST |
输入参数说明
参数名 | 是否必选 | 类型 | 描述 |
---|---|---|---|
chain_name | 是 | string | 区块链名称 |
hd_wallet_id | 否 | string | 企业钱包子钱包id,不传时为主钱包 |
sync_wallets | 否 | int | 添加代币同步到当前企业钱包的其它钱包,0:不同步(默认),1:同步 |
token_data | 是 | string | json对象格式的代币数据,转字符串 |
- address | 是 | string | 代币合约地址 |
- symbol | 是 | string | 代币符号 |
- decimals | 是 | string | 代币小数点位数 |
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
message | string | ok |
输入参数示例
{
"chain_name":"eth",
"token_data":"{\"address\": \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"symbol\": \"WBTC\", \"decimals\": \"8\"}"
}
成功返回示例
{
"message": "ok"
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
交易历史
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/tx_history/ | GET |
输入参数说明
参数名 | 是否必选 | 类型 | 描述 |
---|---|---|---|
chain_name | 是 | string | 区块链名称 |
page | 否 | int | 分页页数,默认0 |
limit | 否 | int | 分页大小,默认20 |
order_by | 否 | string | 排序字段,枚举值:tx_time, block_number, 默认tx_time |
asc | 否 | int | 排序顺序,0降序,1升序,默认0 |
hd_wallet_id | 否 | string | 企业钱包子钱包id,不传时为主钱包 |
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
page | int | 当前页码 |
limit | int | 每页数据条数 |
total | int | 总的数据条数 |
data | array | 交易记录列表 |
- record_id | string | 交易记录ID |
- block_hash | string | 区块hash |
- block_number | string | 区块高度 |
- chain_name | string | 链名称 |
- transaction_hash | string | 交易hash |
- transaction_type | string | 交易类型 |
- contract_address | string | 合约地址 |
- status | string | 状态 |
- tx_time | int | 交易时间戳 |
- from | string | 来源地址 |
- to | string | 目标地址 |
- amount | string | 金额 |
- fee_amount | string | 手续费金额 |
- fee_data | string | 手续费数据 |
- dapp_data | string | dapp数据 |
- event_log | string | 事件日志 |
- parse_data | string | 解析后数据 |
- client_data | string | 客户端数据 |
- operate_type | string | 操作类型 |
- transfer_id | string | 转账ID |
- approve_logic_data | string | 授权逻辑数据 |
- company_wallet_approve_logic_data | string | 公司钱包授权逻辑数据 |
- memo | string | 备注 |
成功返回示例:
{
"page": 0,
"limit": 1,
// 总的交易历史条目数量
"total": "6",
"data": [
{
"record_id": "1687743465",
"block_hash": "00000000031f2a40fc2741ee3c27484651e1052a99f9403d3ea08093fb99606f",
"block_number": "52374080",
"chain_name": "TRX",
"transaction_hash": "fee60897259e350c59805ac557019ade18e3c0971fa4d7528f74960ea2860d8a",
"transaction_type": "native",
"contract_address": "",
// 枚举值: success,
"status": "success",
// 时间戳, 单位秒
"tx_time": 1687743465,
"from": "TYuUmUBnqTGia5jjrmvUJieTUiTVvXEn4Z",
"to": "TSHGQ4sDHtYYawVuwAJh1d5yWc21BBonhE",
"amount": "1",
"fee_amount": "0",
"fee_data": "{\"energy_usage\":\"0\",\"fee_limit\":\"0\",\"net_usage\":\"265\"}",
"dapp_data": "",
"event_log": "",
"parse_data": "{\"token\":{\"address\":\"\",\"amount\":\"\",\"decimals\":0,\"symbol\":\"\"},\"tvm\":{}}",
"client_data": "",
"operate_type": "",
"transfer_id": "",
"approve_logic_data": "",
"company_wallet_approve_logic_data": null
},
]
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
获取审批列表
接口说明
接口类型 | 接口地址 | 请求方法 |
---|---|---|
Restful | /openapi/company_wallet/approvals/ | GET |
输入参数说明
参数名 | 是否必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
page | 否 | int | 1 | 分页页数 |
limit | 否 | int | 20 | 分页大小,最大20 |
status | 否 | string | ING | 审批状态,ING:进行中,FINISH:已完成 |
输出参数说明
字段名 | 类型 | 描述 |
---|---|---|
page | int | 当前页码 |
limit | int | 每页数量 |
data | array | 审批记录列表 |
- cursor | int | 记录游标 |
- record_id | string | 审批记录ID |
- origin_record_id | string | 原始审批记录ID |
- my_status | string | 我的审批状态 |
- status | string | 审批总状态 |
- company_wallet_id | string | 企业钱包ID |
- hd_wallet_id | string | hd钱包ID |
- wallet_name | string | 企业钱包名称 |
- approve_type | string | 审批类型 |
- action_type | string | 操作类型 |
- origin_user_uuid | string | 发起人用户ID |
- origin_user_account | string | 发起人账号 |
- create_time | string | 创建时间 |
- extra_data | object | 额外数据 |
-- txinfo | object | 交易信息 |
成功返回示例
{
"page": 3,
"limit": 1,
"data": [
{
"cursor": 28540,
"record_id": "7ce4b20f3d694ed38b74c1bf004a78e9",
"origin_record_id": "c4ee8c6b39844726a9216739f9cc211c",
"my_status": "REJECT",
"status": "REJECT",
"company_wallet_id": "81bb6cba42254be79aeabf5cfd23a90b",
"wallet_name": "企业钱包二期v1-1-1",
"approve_type": "TRANSACTION_APPROVE",
"action_type": "TRANSACTION",
"origin_user_uuid": "08f0d83dfe024d69af6bfaf9d5a592e4",
"origin_user_account": "P2",
"create_time": "2023-07-03 09:54:10",
"extra_data": {
"txinfo": {
"eip1559": true,
"to": "0xEC4fD89cf3aCf436Fe3be0310C3caa5834A04FE4",
"tokenAddress": "",
"from": "0xB2eC55D4756Ff87333bE6B7b7E273d5Cec0C9180",
"value": "0.00001",
"nonce": "34",
"gasLimit": "21000",
"gasPrice": "0",
"maxFeePerGas": "0.000000293",
"maxPriorityFeePerGas": "0.000000276",
"unit": "GWEI",
"shortHost": "",
"chain": "ETHGoerliTEST",
"isNative": true,
"token": {},
"data": "",
"google_record_id": "44e4fd99e91b4042af32836b884fca75",
"transaction_type": "native",
"isEnterpriseWallet": true,
"amount": "0.00001",
"symbol": "ETH",
"totalGas": "0.000000000006153",
"nativeCurrency": "ETH",
"txinput": {
"chainId": "BQ==",
"txMode": 1,
"maxInclusionFeePerGas": "ARQ=",
"maxFeePerGas": "ASU=",
"gasLimit": "Ugg=",
"nonce": "Ig==",
"transaction": {
"transfer": {
"amount": "CRhOcqAA"
}
},
"toAddress": "0xEC4fD89cf3aCf436Fe3be0310C3caa5834A04FE4"
},
"getPriceKey": "ethereum"
}
}
}
]
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
创建交易相关审批
接口说明
接口描述:创建交易审批
接口类型 | 接口 URL / Path | Http Method |
---|---|---|
restful | /openapi/company_wallet/approval/new/ | POST |
输入参数说明
参数名 | 是否必传 | 类型 | 描述 |
---|---|---|---|
action | 是 | string | 审批类型 TRANSACTION = "转账" TRANSACTION_APPROVE = "授权" TRANSACTION_CONTRACT_INTERACTION = "合约交互" |
hd_wallet_id | 否 | string | 企业钱包子钱包id,不传时为主钱包 |
txinfo | 是 | string(json对象转字符串) | 交易参数 |
--transaction_type | 是 | string | 交易类型 native:主币转账 transfer:代币转账 approve:代币授权 contract:合约交互 transferNFT:nft转账 approveNFT:nft授权 |
--chain | 是 | string | 链名称 支持以下链: BTC ETH BSC SUI Aptos DOGE Kaspa Solana TRX Cosmos Osmosis Conflux ETC LTC OEC HECO Fantom Polygon Avalanche Cronos Klaytn xDai Optimism Arbitrum ArbitrumNova zkSync SmartBCH Harmony Ronin Nervos Casper Polkadot STC ETHGoerliTEST BSCTEST SUITEST zkSyncTEST ScrollL2TEST SeiTEST evm210425 |
--from | 是 | string | 转出地址 |
--to | 否 | string | 转入地址 |
--tokenAddress | 否 | string | token地址,代币转帐、dapp取消授权、nft转账、nft取消授权时必填 |
--value | 否 | string | 转账金额,主币转帐、代币转帐、dapp主币转代币、nft转帐时必填 |
--nonce | 否 | string | 自定义nonce |
--gasLimit | 否 | string | 上链参数gasLimit |
--gasPrice | 否 | string | 上链参数gasPrice |
--maxPriorityFeePerGas | 否 | string | 上链参数maxPriorityFeePerGas |
--maxFeePerGas | 否 | string | 上链参数maxFeePerGas |
--data | 否 | string | dapp授权、nft授权、合约交互时必填 |
--pretreatment_value | 否 | string | 预交易值,eth,bsc,arb,polygon 这几条链的合约交互时填写, 如果这几条链不填该值,则无法解析预交易详细内容的情况,将按照“大额交易审批”(若有)审批流进行审批。 |
--token_id | 否 | string | nft转账时必填 |
--dappInfo | 否 | object | dapp信息 |
----origin | 否 | string | dapp源 |
----href | 否 | string | dapp地址 |
----portName | 否 | string | dapp port name |
----icon | 否 | string | dapp图标 |
----dappName | 否 | string | dapp名称 |
加速、取消输入参数说明
参数名 | 是否必传 | 类型 | 描述 |
---|---|---|---|
txinfo | 是 | object | 交易参数 |
--original_record_id | 是 | string | 原交易的审批记录origin_record_id |
--operate_type | 是 | string | 操作类型,speed_up:加速,cancel:取消 |
--gasLimit | 否 | string | 上链参数gasLimit |
--gasPrice | 否 | string | 上链参数gasPrice |
--maxPriorityFeePerGas | 否 | string | 上链参数maxPriorityFeePerGas |
--maxFeePerGas | 否 | string | 上链参数maxFeePerGas |
输出参数说明
参数名 | 类型 | 描述 |
---|---|---|
origin_record_id | string | 发起人的审批记录ID |
record_id | string | 自动通过的审批详情id,有自动通过时返回 |
is_auto_pass | string | 是否全部自动通过 |
入参示例
发起普通转账--原生币
{
"action": "TRANSACTION",
# 这个txinfo字段需要将 json 数据转为字符串,这里展示明文,仅供参考
"txinfo" :JSON.stringify({
"chain": "HECO",
"from": "0x5adE66b500B80070F3280198CEBA2Af830D8e0ab",
"to": "0x7620E9bbb6591b9F53b6b5002B716B8D23ca3950",
"value": "0.01",
"gasLimit": "97839",
"gasPrice":"0",
"maxPriorityFeePerGas": "2.25",
"maxFeePerGas": "2.25"
})
}
发起普通转账--非原生币
{
"action": "TRANSACTION",
# 这个txinfo字段需要将 json 数据转为字符串,这里展示明文,仅供参考
"txinfo":JSON.stringify({
"to":"0x7620E9bbb6591b9F53b6b5002B716B8D23ca3950",
"tokenAddress":"0xa71edc38d189767582c38a3145b5873052c3e47a",
"from":"0x5adE66b500B80070F3280198CEBA2Af830D8e0ab",
"value":"0.0001",
"nonce":"14",
"gasLimit":"63262",
"gasPrice":"0",
"maxFeePerGas":"2.475",
"maxPriorityFeePerGas":"2.475",
"chain":"HECO"
})
}
发起dapp代币授权
{
"action": "TRANSACTION_APPROVE",
# 这个txinfo字段需要将 json 数据转为字符串,这里展示明文,仅供参考
"txinfo":JSON.stringify({
"from":"0x5adE66b500B80070F3280198CEBA2Af830D8e0ab",
"to":"0xa71edc38d189767582c38a3145b5873052c3e47a", //代币地址
"nonce":"14",
"gasLimit":"97839",
"maxPriorityFeePerGas":"2.25",
"maxFeePerGas":"2.25",
"chain":"HECO",
"data":"0x00000000",
"dappInfo":{
"origin":"https://app.dodoex.io",
"href":"https://app.dodoex.io/?from=USDT&network=heco&to=HT",
"portName":"https://app.dodoex.io1689171704045",
"icon":"https://dashboard-assets.dappradar.com/geRRcWz9IdTwSrm1/document/14738/dodo-dapp-exchanges-ethereum-logo_13c0bed361114265825072e6b01a2c03.png",
"dappName":"DODO"
}
})
}
发起dapp合约交互
{
"action": "TRANSACTION_CONTRACT_INTERACTION",
# 这个txinfo字段需要将 json 数据转为字符串,这里展示明文,仅供参考
"txinfo":JSON.stringify({
"from":"0x5adE66b500B80070F3280198CEBA2Af830D8e0ab",
"to":"0xbc3a8f63f311f3b005ff8afc1a26272faaba8d36", //dapp项目方合约地址
"nonce":"14",
"gasLimit":"354052",
"maxPriorityFeePerGas":"2.25",
"maxFeePerGas":"2.25",
"chain":"HECO",
"data":"0x301a3720000000000000000000000000",
"value":"0.0001",
"amount":"0.0001",
"dappInfo":{
"origin":"https://app.dodoex.io",
"href":"https://app.dodoex.io/?network=heco&from=HT&to=USDT",
"portName":"https://app.dodoex.io1689171328132",
"icon":"https://dashboard-assets.dappradar.com/geRRcWz9IdTwSrm1/document/14738/dodo-dapp-exchanges-ethereum-logo_13c0bed361114265825072e6b01a2c03.png",
"dappName":"DODO"
}
})
}
取消代币授权
action:TRANSACTION_APPROVE
txinfo:
{
"transaction_type": "approve",
"to": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"from": "0xd7f7Bf0dfCF8e6a3Fa9BB7013DcE5e3f6956c3cb", //dapp项目方合约地址
"nonce": "16",
"gasLimit": "299979",
"gasPrice": "0.11",
"maxFeePerGas": "0",
"maxPriorityFeePerGas": "0",
"chain": "Arbitrum",
"isCancelTokenApprove": true,
"tokenAddress": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8" //代币地址
}
NFT转账
action:TRANSACTION
txinfo:
{
"transaction_type": "transferNFT",
"to": "0x27D25bBDA38F681c34A514E74D4e193BC1c2f19E",
"from": "0xd7f7Bf0dfCF8e6a3Fa9BB7013DcE5e3f6956c3cb",
"value": "1",
"nonce": "15",
"gasLimit": "130977",
"gasPrice": "6.2964",
"maxFeePerGas": "0",
"maxPriorityFeePerGas": "0",
"chain": "xDai",
"token_id": "51004",
"tokenAddress": "0xCF964c89f509a8c0Ac36391c5460dF94B91daba5" //NFT合约地址
}
NFT授权
action:TRANSACTION_APPROVE
txinfo:
{
"transaction_type": "approveNFT",
"to": "0x44b3f42e2bf34f62868ff9e9dab7c2f807ba97cb", // NFT合约地址
"from": "0xd7f7Bf0dfCF8e6a3Fa9BB7013DcE5e3f6956c3cb",
"value": "0",
"nonce": "238",
"gasLimit": "60591",
"maxFeePerGas": "195.1387121",
"maxPriorityFeePerGas": "47.73988292",
"chain": "Polygon",
"data": "0x000000000",
"dappInfo": {
"origin": "https://opensea.io",
"href": "https://opensea.io/account",
"portName": "https://opensea.io1697038498545",
"icon": "https://dashboard-assets.dappradar.com/document/13/opensea-dapp-marketplaces-ethereum-logo_a3421ac6e32d529db3c8293f4cfa9bcd.png",
"tokenGasless": {},
"isBlackListedDapp": false,
"dappName": "OpenSea"
}
}
NFT取消授权
action:TRANSACTION_APPROVE
txinfo:
{
"transaction_type": "approveNFT",
"to": "0x1E0049783F008A0085193E00003D00cd54003c71", //DAPP项目方合约地址
"from": "0xd7f7Bf0dfCF8e6a3Fa9BB7013DcE5e3f6956c3cb",
"value": "0",
"nonce": "242",
"gasLimit": "35396",
"gasPrice": "0",
"maxFeePerGas": "84.86624019",
"maxPriorityFeePerGas": "41.21511274",
"chain": "Polygon",
"tokenAddress": "0x44b3f42e2BF34F62868Ff9e9dAb7C2F807ba97Cb", //NFT合约地址
"isCancelTokenApprove": true
}
加速
txinfo:
{
"gasLimit": "21000",
"gasPrice": "0",
"maxFeePerGas": "70",
"maxPriorityFeePerGas": "35",
"operate_type": "speed_up",
"original_record_id": "05104d9fe7c2410a95dd0261fc771111"
}
成功返回示例
{
"ok": true,
"data": {
"origin_record_id": "xxxx", #发起人的审批记录ID,
"is_auto_pass": true, #是否自动通过
"record_id": "xxx",
}
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
同意/拒绝审批
接口说明
接口描述:同意、拒绝审批。
接口类型 | 接口 URL / Path | Http Method |
---|---|---|
restful | /openapi/company_wallet/approval/agree/ | POST |
输入参数说明
接口描述:
参数名 | 是否必传 | 类型 | 描述 |
---|---|---|---|
record_id | 是 | string | 审批记录详情ID,同意/拒绝都传 |
agree | 是 | string | agree/reject |
成功返回示例
{
"ok": true,
"data": {
"record_id": "xxxx",
"origin_record_id": "xxx", #发起人角度的记录ID
"status": "xxx",
}
}
失败返回示例
{
"ok": false,
"err_msg": "xxxx",
"err_code": xxxx
}
Webhook
Webhook 概述
通过 Webhook 主动通知该企业钱包发生的一些事件通知,若用户想接收通知,则可以在企业钱包API管理页面配置回调地址Webhook。
请求描述
采用与API key相同的鉴权方案,OpenBlock向用户配置的Webhook回调地址发送发送一个 POST
请求,HTTP 请求头中 Content-Type
为 application/json;charset=UTF-8
。用户收到Webhook 推送通知后,需要返回成功应答(HTTP状态码 200 ),成功应答的内容是success;平台在收到非成功状态码时,会认为此次推送失败,会再次进行重试推送,再次推送的频率为 30s,1m,5m,1h,12h,24h。
事件格式
参数 | 字段类型 | 描述 |
---|---|---|
event_type | string | 回调事件类型 |
event_detail | object | 回调事件详情 |
事件类型
序号 | event_type | 描述 |
---|---|---|
1 | CREATE_TRANSACTION | 创建转账交易(调用approval/new接口) |
2 | TRANSACTION_STATUS_CHANGE | 交易状态变更(拒绝,全体同意) |
event_detail参数说明
参数名 | 类型 | 描述 |
---|---|---|
record_id | string | 审批记录id |
company_wallet_id | string | 企业钱包id |
wallet_name | string | 企业钱包名称 |
action_type | string | 审批类型 TRANSACTION = "转账" |
approve_type | string | 审批决策 SINGLE_APPROVE = '单人审批' DESCISION_APPROVE = '决策模型审批' ALL_ADMIN_APPROVE = '全部管理员审批' TRANSACTION_APPROVE = '交易审批流' |
status | 该条审批的状态 ING = "审批中" TRADING = "仅同意未调用action" # 交易相关的审批的中间状态 AGREE = "同意" REJECT = "驳回" DELETED = "删除" CANCEL = "取消" AUTO_TRADING = "自动审批,仅同意未调用action" # 交易相关的审批的中间状态 TIMEOUT = "超时" | |
extra_data | object | 扩展数据 |
--txinfo | object | 交易参数 |
agree_list | list | 已同意列表 |
ing_list | object | 进行中列表 |
txinfo参数说明
参数名 | 类型 | 描述 |
---|---|---|
from | string | 发送地址 |
to | string | 接收地址 |
tokenAddress | string | token地址 |
value | string | 交易金额(数量) |
nonce | string | Nonce |
gasLimit | string | gasLimit |
gasPrice | string | gasPrice |
maxFeePerGas | string | maxFeePerGas |
maxPriorityFeePerGas | string | maxPriorityFeePerGas |
chain | string | 链名称 |
isNative | bool | 是否主币 |
transaction_type | string | 交易类型,native:主币转账,transfer:代币转账 |
amount | string | 交易金额 |
symbol | string | 主币符号 |
nativeCurrency | string | 主币名称 |
event_detail示例
{
"record_id":"672cbf141c0f4f988dec59678398a984",
"company_wallet_id":"2e3f75ebf9294fe68516f2d24cde74d3",
"wallet_name":"企业钱包1",
"approve_type":"TRANSACTION_APPROVE",
"action_type":"TRANSACTION",
"status":"ING",
"is_simple_type":false,
"create_time":"2023-07-16 23:02:22",
"is_sponsor":true,
"approve_title_type":"TRADE_APPROVE_MODIFY",
"expired_time":null,
"extra_data":{
"txinfo":{
"eip1559":true,
"to":"0x27652D40eA3393caB38263A3Bdf268265dB00e42",
"tokenAddress":"",
"from":"0x5adE66b500B80070F3280198CEBA2Af830D8e0ab",
"value":"0.001",
"nonce":"38",
"gasLimit":"21000",
"gasPrice":"0",
"maxFeePerGas":"2.475",
"maxPriorityFeePerGas":"2.475",
"unit":"GWEI",
"shortHost":"",
"chain":"HECO",
"isNative":true,
"token":{
},
"data":"",
"transaction_type":"native",
"isEnterpriseWallet":true,
"amount":"0.001",
"symbol":"HT",
"totalGas":"0.000051975",
"nativeCurrency":"HT",
"txinput":{
"chainId":"gA==",
"txMode":1,
"maxInclusionFeePerGas":"k4WAwA==",
"maxFeePerGas":"k4WAwA==",
"gasLimit":"Ugg=",
"nonce":"Jg==",
"transaction":{
"transfer":{
"amount":"A41+pMaAAA=="
}
},
"toAddress":"0x27652D40eA3393caB38263A3Bdf268265dB00e42"
},
"getPriceKey":"huobi-token"
}
},
"origin_user_id":"dbfb1c42e43f4a80b22409e9a5707344",
"origin_user_account":"cc",
"agree_list":[
{
"user_id":"dbfb1c42e43f4a80b22409e9a5707344",
"account":"xxx@gmail.com",
"nick_name":"cc",
"create_time":"2023-07-16 23:02:22",
"status":"init"
}
],
"ing_list":[
{
"node_name":"节点1",
"valid_users_number":2,
"total_users_number":2,
"status":"ING",
"user_list":[
{
"user_id":"dbfb1c42e43f4a80b22409e9a5707344",
"account":"xxx@gmail.com",
"nick_name":"cc",
"update_time":"2023-07-16 23:02:22",
"status":"AGREE"
},
{
"user_id":"00faf29f7d4744ee8a049110030a5cf3",
"account":"xxx@gmail.com",
"nick_name":"jj",
"update_time":"2023-07-16 23:02:22",
"status":"ING"
}
]
}
]
}
错误码
错误码 | 错误描述 |
---|---|
68000 | 通用错误码,错误描述查看 err_msg |
50001 | 参数错误 |
50002 | nonce重复请求 |
50003 | 无效的 api key |
50004 | 不可用的 api key |
50005 | IP不允许访问 |
50006 | 请求签名无效 |
50007 | 无效的钱包 |
50008 | 用户异常 |
50101 | 审批记录不存在 |
50102 | 审批记录未通过审批 |
50103 | 原审批记录已完成 |
更多待补充
Docker API
该项目旨在为用户提供本地签名的能力,以便于用户可以在自己的服务器上部署钱包服务,而不是使用 Openblock 提供的钱包服务。
启动
首先,确保你已经安装了 Docker,然后执行以下命令:
docker pull openblock/openblock:1.0.0
docker run -p 7790:7790 -d openblock/openblock:1.0.0
使用
进入 http://localhost:7790
,你将看到 MPC 单元的导入界面,按照提示导入你的 MPC 单元,导入成功后,你将看到你的企业钱包。
签名接口
API Description
Path | Method |
---|---|
/openapi/sign/send_transaction | POST |
Query Parameters
Name | Required | Description |
---|---|---|
key | true | 企业钱包申请的 API_KEY |
Body Parameters
Name | Type | Required | Description |
---|---|---|---|
company_wallet_approve_record_id | string | true | 企业钱包审批id |
Successful Response Example
{
"code": 0,
"data": "",// txhash
}
Error Response Example
{
"code": 10001,
"message": "sign error"
}
API SDK
我们提供 golang/python 二种语言的 API SDK:
更新日志
2023-12-28 v1.0.4
- 增加 Golang和Python SDK
2023-10-26 v1.0.3
- 增加支持企业钱包hd钱包
- 删除
获取一个用户账户下所有的企业钱包信息
接口,增加获取企业钱包信息
、获取企业钱包子钱包地址
接口 - 增加支持发起加速、取消审批
2023-10-13 v1.0.2
- 增加支持evm dapp授权、合约交互、NFT授权、NFT转账交易类型
2023-09-20 v1.0.1
- 新增docker 镜像,支持 send_transaction api(仅支持 evm networks)
- 接口路径前缀变更,由 /oopenapi/v1 变为 /openapi
2023-07-31 v1.0.0
- 创建文档
- 新增
获取一个用户账户下所有的企业钱包信息
、获取钱包余额
、添加自定义代币
、交易历史
、获取审批列表
、创建交易相关审批
、同意/拒绝审批
接口